import config from '@/config'
import axios from 'axios'
import {getLocal} from '@/utils/local'

class HttpRequest {
    constructor() {
        this.baseURL = config.baseURL
        this.timeout = 3000
    }
    setInterceptors(instance) {
        instance.interceptors.request.use(config => {
            config.headers.authorization = 'Bearer ' + getLocal('token')
            return config;
        })
        instance.interceptors.response.use(res => {
            if (res.status == 200) {
                if(res.data.err === 0){ // 统一处理错误状态码
                    return Promise.resolve(res.data);//成功状态
                }else{
                    return Promise.reject(res.data.data);//失败状态
                }
            } else {
                return Promise.reject(res.data.data); //后端实现的话,如果失败了会在返回的结果中增加一个data字段 失败的原因
            }
        }, err => {
            switch (err.response.status) {
                case '401':
                    console.log(err);
                    break;
                default:
                    break;
            }
            return Promise.reject(err);
        })
    }
    mergeOptions(options) {
        return { baseURL: this.baseURL, timeout: this.timeout, ...options }
    }
    request(options) {
        const instance = axios.create(); // 创建axios实例
        this.setInterceptors(instance);//创建单独的拦截器
        const opts = this.mergeOptions(options);//合并选项
        return instance(opts)//单独拦截器的配置项
    }
    get(url, config) {
        return this.request({
            method: 'get',
            url,
            ...config // 参数可以直接展开
        });
    }
    post(url, data) { //post请求 数据在请求体中 {}
        return this.request({
            method: 'post',
            url,
            data: data // post要求必须传入data属性
        })
    }
}
export default new HttpRequest;